import glob
import os
from flask import Blueprint, session, g, request, redirect, url_for,current_app
from models import DMenu
from fun import model_to_dict

admin_blueprint = Blueprint('admin',__name__,url_prefix="/admin")   #创建父蓝图


@admin_blueprint.route('/')
def to_admin():
    return redirect(url_for('admin.index.index'))

@admin_blueprint.before_request
def before_request_func():
    #print("admin_blueprint==>before_request_func")
    endpoint = request.endpoint
    #print(session.get('user_id'))

    # 白名单，无需登陆
    white_list = ["admin.index.login", "admin.index.captcha", "admin.index.test"]
    print("aid:%s"%(session.get('admin_id')))
    if session.get('admin_id')==None and endpoint not in white_list:
        print('跳转登陆界')
        return redirect(url_for('admin.index.login'))  # 302跳转
    else:
        app = current_app._get_current_object()
        g.config=app.config
        g.admin_id = session.get('admin_id')
        g.admin_name = session.get('admin_name')

        list = DMenu.query.filter(DMenu.pid==0).filter(DMenu.status == 0).order_by(DMenu.sort.asc(), DMenu.id.desc()).all()

        menus_list=[]
        for val in list:
            v=(model_to_dict(val))
            v['children']=DMenu.query.filter(DMenu.pid == val.id).filter(DMenu.status == 0).order_by( DMenu.sort.asc(), DMenu.id.desc()).all()
            menus_list.append(v)

        #拼凑的格式
        # menus=[
        #     {'id':1,
        #      'name':'文章管理',
        #      'children':[
        #                 {'id':11,'name':'分类设置','url':'admin.category.index'},
        #                 {'id':22,'name':'文章管理','url':'admin.new.index'}
        #             ]
        #      },
        #     { 'id':2,
        #       'name':'系统管理',
        #       'children':[
        #         {'id': 33, 'name': '用户管理', 'url': 'admin.admin.index'},
        #         {'id': 44, 'name': '菜单管理', 'url': 'admin.menu.index'}
        #         ]
        #      }
        #
        # ]

        g.menus=menus_list

# 获取当前包的路径
package_dir = os.path.dirname(os.path.abspath(__file__))

# 获取目录名（即当前脚本所在的目录名称）
package_dir_name = os.path.basename(package_dir)


# 遍历包内的所有.py文件
for filename in glob.glob(os.path.join(package_dir, "*.py")):
    # 忽略__init__.py文件
    if filename.endswith('__init__.py'):
        continue

        # 导入模块
    module_name = os.path.splitext(os.path.basename(filename))[0]  #获取本目录的*.py文件

    module_=__import__(f'{__name__}.{module_name}', fromlist=['*'])  #动态导入.py文件,并返回这个包
    #print(module_.abc) 获取包内数据

    print(f"导入蓝图{__name__}.{module_name}")

    # package_dir_name+'_'+module_name    这个就是约定模式 蓝图对象的名称 admin_index
    #根据getattr函数  获取这个包对象内的 admin_index 注册到父蓝图

    admin_blueprint.register_blueprint(getattr(module_, package_dir_name+'_'+module_name))  # 将蓝图注册到父蓝图
